package com.example.mybatisplus.web.controller;

import com.example.mybatisplus.mapper.AdminMapper;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.example.mybatisplus.common.JsonResponse;
import com.example.mybatisplus.service.AdminService;
import com.example.mybatisplus.model.domain.Admin;


/**
 *
 *  前端控制器
 *
 *
 * @author lxp
 * @since 2021-06-17
 * @version v1.0
 */


@RestController// @Controller和@ResponseBody的合二为一
@RequestMapping("/api/admin")
public class AdminController {

    @Autowired
    private AdminService adminService;

    // 在springboot默认情况之下，controller里所有方法都会返回一个视图
    // 现在在做前后端分离开发，前端页面不在这，我们只需要返回数据，不需要返回页面
    // 如果要返回数据，加注解

    @RequestMapping("xx")// 给方法加映射路径
    // @ResponseBody// 表示这个方法不再返回页面 而是返回数据
    public Admin hh(){
        // 根据id查询用户
        Admin admin = adminService.getById(88);
        return admin;
    }

    // 发请求同时发参数
    // 1.get典型传参 url?x=y&a=b 直接用参数列表接 前端咋传后端咋接 要求方法的参数名与前端传的键名一致（有多少键名就多少参数）
    @GetMapping("getById")
    // @ResponseBody
    public Admin qq(Long id){
        return adminService.getById(id);
    }
    // 2.get典型传参 url?x=y&a=b 用对象接 要求对象属性名和键名一致
    // 假如没有这样一个对象可接收，可以方法参数里多写一个别的类型对象，会包装进不同对象
    @GetMapping("getById1")
    // @ResponseBody
    public JsonResponse qq1(Admin admin){// 统一返回 返回统一的json数据 {x:y, a:b}
        Admin admin1 = adminService.getById(admin.getId());
        return JsonResponse.success(admin1);
    }

    // 3.post请求传参： 前后端分离开发中 前端post请求发送的是json数据
    // 后端必须用对象去接 要求对象属性名必须为json键名 然后再在参数前加注解
    // 注解作用是将json转为对象
    @PostMapping("login")
    // @ResponseBody
    public JsonResponse login(@RequestBody Admin admin){
        Admin login = adminService.login(admin);
        return JsonResponse.success(login);
    }
}

